🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / prefs / src / commonTest / kotlin / org / meshtastic / core / prefs / ui / UiPrefsImplTest.kt
Displaying Raw • Download
core/prefs/src/commonTest/kotlin/org/meshtastic/core/prefs/ui/UiPrefsImplTest.kt 911a58089da5fafbf8c7d9f55bc84e98dd2f3cef (911a5808) Text, 6.19 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.prefs.ui
Tff7b72import T7ee787androidx.datastore.core.DataStore
Tff7b72import T7ee787androidx.datastore.preferences.core.PreferenceDataStoreFactory
Tff7b72import T7ee787androidx.datastore.preferences.core.Preferences
Tff7b72import T7ee787androidx.datastore.preferences.core.edit
Tff7b72import T7ee787kotlinx.coroutines.cancel
Tff7b72import T7ee787kotlinx.coroutines.flow.first
Tff7b72import T7ee787kotlinx.coroutines.test.TestDispatcher
Tff7b72import T7ee787kotlinx.coroutines.test.TestScope
Tff7b72import T7ee787kotlinx.coroutines.test.UnconfinedTestDispatcher
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787okio.FileSystem
Tff7b72import T7ee787okio.Path
Tff7b72import T7ee787org.meshtastic.core.di.CoroutineDispatchers
Tff7b72import T7ee787org.meshtastic.core.model.DeviceType
Tff7b72import T7ee787org.meshtastic.core.prefs.di.asUiDataStore
Tff7b72import T7ee787kotlin.test.AfterTest
Tff7b72import T7ee787kotlin.test.BeforeTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertFalse
Tff7b72import T7ee787kotlin.test.assertNull
Tff7b72import T7ee787kotlin.test.assertTrue
Tff7b72import T7ee787kotlin.uuid.Uuid
Tff7b72class T56d364UiPrefsImplTest Tb4b4b4{
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3tmpDirTb4b4b4: Te6edf3Path
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3dataStoreTb4b4b4: Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3prefsTb4b4b4: Te6edf3UiPrefsImpl
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3testDispatcherTb4b4b4: Te6edf3TestDispatcher
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3testScopeTb4b4b4: Te6edf3TestScope
Tf0883e@BeforeTest
Tff7b72fun Td2a8ffsetupTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3testDispatcher Tff7b72= Te6edf3UnconfinedTestDispatcherTb4b4b4(Tb4b4b4)
Te6edf3testScope Tff7b72= Te6edf3TestScopeTb4b4b4(Te6edf3testDispatcherTb4b4b4)
Te6edf3tmpDir Tff7b72= Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEM_TEMPORARY_DIRECTORY Tff7b72/ Ta5d6ff"Ta5d6ffuiPrefsTest-Tffd700${Te6edf3UuidTb4b4b4.Te6edf3randomTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff"
Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4.Te6edf3createDirectoriesTb4b4b4(Te6edf3tmpDirTb4b4b4)
Te6edf3dataStore Tff7b72=
Te6edf3PreferenceDataStoreFactoryTb4b4b4.Te6edf3createWithPathTb4b4b4(
Te6edf3scope Tff7b72= Te6edf3testScopeTb4b4b4,
Te6edf3produceFile Tff7b72= Tb4b4b4{ Te6edf3tmpDir Tff7b72/ Ta5d6ff"Ta5d6fftest.preferences_pbTa5d6ff" Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3dispatchers Tff7b72= Te6edf3CoroutineDispatchersTb4b4b4(Te6edf3testDispatcherTb4b4b4, Te6edf3testDispatcherTb4b4b4, Te6edf3testDispatcherTb4b4b4)
Te6edf3prefs Tff7b72= Te6edf3UiPrefsImplTb4b4b4(Te6edf3dataStoreTb4b4b4.Te6edf3asUiDataStoreTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3dispatchersTb4b4b4)
Tb4b4b4}
Tf0883e@AfterTest
Tff7b72fun Td2a8fftearDownTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3testScopeTb4b4b4.Te6edf3cancelTb4b4b4(Tb4b4b4)
Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4.Te6edf3deleteRecursivelyTb4b4b4(Te6edf3tmpDirTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`explicit selected connection transport wins over legacy booleans`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3dataStoreTb4b4b4.Te6edf3edit Tb4b4b4{
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SELECTED_CONNECTION_TRANSPORTTff7b72] Tff7b72= Te6edf3DeviceTypeTb4b4b4.Te6edf3USBTb4b4b4.Te6edf3name
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_BLE_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_NETWORK_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_USB_TRANSPORTTff7b72] Tff7b72= Tff7b72false
Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceTypeTb4b4b4.Te6edf3USBTb4b4b4, Te6edf3prefsTb4b4b4.Te6edf3selectedConnectionTransportTb4b4b4.Te6edf3valueTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`invalid selected connection transport falls back to legacy booleans`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3dataStoreTb4b4b4.Te6edf3edit Tb4b4b4{
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SELECTED_CONNECTION_TRANSPORTTff7b72] Tff7b72= Ta5d6ff"Ta5d6ffWIFITa5d6ff"
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_BLE_TRANSPORTTff7b72] Tff7b72= Tff7b72false
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_NETWORK_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_USB_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceTypeTb4b4b4.Te6edf3TCPTb4b4b4, Te6edf3prefsTb4b4b4.Te6edf3selectedConnectionTransportTb4b4b4.Te6edf3valueTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`selected connection transport is null when no legacy transport keys exist`Tb4b4b4(Tb4b4b4) Tff7b72=
Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{ Te6edf3assertNullTb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3selectedConnectionTransportTb4b4b4.Te6edf3valueTb4b4b4) Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`legacy selected connection transport defaults to BLE when all transports are visible`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3dataStoreTb4b4b4.Te6edf3edit Tb4b4b4{
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_BLE_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_NETWORK_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_USB_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceTypeTb4b4b4.Te6edf3BLETb4b4b4, Te6edf3prefsTb4b4b4.Te6edf3selectedConnectionTransportTb4b4b4.Te6edf3valueTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`legacy selected connection transport chooses TCP when BLE is hidden`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3dataStoreTb4b4b4.Te6edf3edit Tb4b4b4{
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_BLE_TRANSPORTTff7b72] Tff7b72= Tff7b72false
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_NETWORK_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_USB_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceTypeTb4b4b4.Te6edf3TCPTb4b4b4, Te6edf3prefsTb4b4b4.Te6edf3selectedConnectionTransportTb4b4b4.Te6edf3valueTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`legacy selected connection transport chooses USB when only USB is visible`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3dataStoreTb4b4b4.Te6edf3edit Tb4b4b4{
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_BLE_TRANSPORTTff7b72] Tff7b72= Tff7b72false
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_NETWORK_TRANSPORTTff7b72] Tff7b72= Tff7b72false
Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_USB_TRANSPORTTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceTypeTb4b4b4.Te6edf3USBTb4b4b4, Te6edf3prefsTb4b4b4.Te6edf3selectedConnectionTransportTb4b4b4.Te6edf3valueTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`full message timestamps default to false`Tb4b4b4(Tb4b4b4) Tff7b72=
Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{ Te6edf3assertFalseTb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3showFullMessageTimestampsTb4b4b4.Te6edf3valueTb4b4b4) Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`full message timestamps persist when enabled`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3prefsTb4b4b4.Te6edf3setShowFullMessageTimestampsTb4b4b4(Tff7b72trueTb4b4b4)
Tff7b72val Te6edf3stored Tff7b72= Te6edf3dataStoreTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3first Tb4b4b4{ Tffa657itTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_FULL_MESSAGE_TIMESTAMPSTff7b72] Tff7b72=Tff7b72= Tff7b72true Tb4b4b4}
Te6edf3assertTrueTb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3showFullMessageTimestampsTb4b4b4.Te6edf3valueTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Tff7b72trueTb4b4b4, Te6edf3storedTff7b72[Te6edf3UiPrefsImplTb4b4b4.Te6edf3KEY_SHOW_FULL_MESSAGE_TIMESTAMPSTff7b72]Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`firmware update notification keys persist without duplicates`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3testScopeTb4b4b4.Te6edf3runTest Tb4b4b4{
Te6edf3prefsTb4b4b4.Te6edf3recordFirmwareUpdateNotificationKeyTb4b4b4(Ta5d6ff"Ta5d6fffirmware-update-notified:node:target:2.8.0Ta5d6ff"Tb4b4b4)
Te6edf3prefsTb4b4b4.Te6edf3recordFirmwareUpdateNotificationKeyTb4b4b4(Ta5d6ff"Ta5d6fffirmware-update-notified:node:target:2.8.0Ta5d6ff"Tb4b4b4)
Te6edf3prefsTb4b4b4.Te6edf3recordFirmwareUpdateNotificationKeyTb4b4b4(Ta5d6ff"Ta5d6fffirmware-update-notified:node:target:2.9.0Ta5d6ff"Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(
Te6edf3setOfTb4b4b4(Ta5d6ff"Ta5d6fffirmware-update-notified:node:target:2.8.0Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffirmware-update-notified:node:target:2.9.0Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3prefsTb4b4b4.Te6edf3firmwareUpdateNotificationKeysTb4b4b4.Te6edf3valueTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.3 - Generated in 0.08s